/*
 * Copyright (C) 2013 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.visikard.widget.expandedlistview;

import java.util.List;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;

/**
 * This is a custom array adapter used to populate the listview whose items will
 * expand to display extra content in addition to the default display.
 */
public abstract class BaseExpandedAdapter<T extends BaseExpandableListItem> extends ArrayAdapter<T> {

    public BaseExpandedAdapter(Context context, int layoutViewResourceId, List<T> data) {
        super(context, layoutViewResourceId, data);
    }
    
    //This method returns the view for rendering a list view item
    public abstract View getViewItem(int position, View convertView, ViewGroup parent);
    //This method returns the expanding layout attached in the list view item
    public abstract ExpandingLayout getExpandingLayout(View view);

    /**
     * Populates the item in the listview cell with the appropriate data. This method
     * sets the thumbnail image, the title and the extra text. This method also updates
     * the layout parameters of the item's view so that the image and title are centered
     * in the bounds of the collapsed view, and such that the extra text is not displayed
     * in the collapsed state of the cell.
     */    
    @Override
    public final View getView(int position, View convertView, ViewGroup parent) {

//        final ExpandableListItem object = mData.get(position);
//
//        if(convertView == null) {
//            LayoutInflater inflater = ((Activity) getContext()).getLayoutInflater();
//            convertView = inflater.inflate(mLayoutViewResourceId, parent, false);
//        }
//
//        LinearLayout linearLayout = (LinearLayout)(convertView.findViewById(
//                R.id.item_linear_layout));
//        LinearLayout.LayoutParams linearLayoutParams = new LinearLayout.LayoutParams
//                (AbsListView.LayoutParams.MATCH_PARENT, object.getCollapsedHeight());
//        linearLayout.setLayoutParams(linearLayoutParams);
//
//        ImageView imgView = (ImageView)convertView.findViewById(R.id.image_view);
//        TextView titleView = (TextView)convertView.findViewById(R.id.title_view);
//        TextView textView = (TextView)convertView.findViewById(R.id.text_view);
//
//        titleView.setText(object.getTitle());
//        imgView.setImageBitmap(getCroppedBitmap(BitmapFactory.decodeResource(getContext()
//                .getResources(), object.getImgResource(), null)));
//        textView.setText(object.getText());
//
//        convertView.setLayoutParams(new ListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT,
//                AbsListView.LayoutParams.WRAP_CONTENT));
//
//        ExpandingLayout expandingLayout = (ExpandingLayout)convertView.findViewById(R.id
//                .expanding_layout);
//        expandingLayout.setExpandedHeight(object.getExpandedHeight());
//        expandingLayout.setSizeChangedListener(object);
//
//        if (!object.isExpanded()) {
//            expandingLayout.setVisibility(View.GONE);
//        } else {
//            expandingLayout.setVisibility(View.VISIBLE);
//        }
    	
    	BaseExpandableListItem item = getItem(position);
    	
    	View result = getViewItem(position, convertView, parent);
    	
		ExpandingLayout expandingLayout = getExpandingLayout(result);
		expandingLayout.setExpandedHeight(item.getExpandedHeight());
		expandingLayout.setSizeChangedListener(item);

		if (!item.isExpanded()) {
			expandingLayout.setVisibility(View.GONE);
		} else {
			expandingLayout.setVisibility(View.VISIBLE);
		}

        return result;
    }

}